home *** CD-ROM | disk | FTP | other *** search
/ X User Tools / X User Tools (O'Reilly and Associates)(1994).ISO / sun4c / archive / tcltk.z / tcltk / man / cat3 / ConfigWidg.3 < prev    next >
Text File  |  1994-09-20  |  39KB  |  859 lines

  1.  
  2.  
  3.  
  4. Tk_ConfigureWidget(3) Tk Library Procedures                   3.3
  5.  
  6.  
  7.  
  8. _________________________________________________________________
  9.  
  10. NAME
  11.      Tk_ConfigureWidget,       Tk_Offset,       Tk_ConfigureInfo,
  12.      Tk_FreeOptions - process configuration options for widgets
  13.  
  14. SYNOPSIS
  15.      #include <tk.h>
  16.  
  17.      int
  18.      Tk_ConfigureWidget(_i_n_t_e_r_p, _t_k_w_i_n, _s_p_e_c_s, _a_r_g_c, _a_r_g_v, _w_i_d_g_R_e_c, _f_l_a_g_s)
  19.  
  20.      int
  21.      Tk_Offset(_t_y_p_e, _f_i_e_l_d)
  22.  
  23.      int
  24.      Tk_ConfigureInfo(_i_n_t_e_r_p, _t_k_w_i_n, _s_p_e_c_s, _w_i_d_g_R_e_c, _a_r_g_v_N_a_m_e, _f_l_a_g_s)
  25.  
  26.      Tk_FreeOptions(_s_p_e_c_s, _w_i_d_g_R_e_c, _d_i_s_p_l_a_y, _f_l_a_g_s)                |
  27.  
  28. ARGUMENTS
  29.      Tcl_Interp      *_i_n_t_e_r_p    (in)      Interpreter to use  for
  30.                                           returning   error  mes-
  31.                                           sages.
  32.  
  33.      Tk_Window       _t_k_w_i_n      (in)      Window     used      to
  34.                                           represent        widget
  35.                                           (needed  to  set  up  X
  36.                                           resources).
  37.  
  38.      Tk_ConfigSpec   *_s_p_e_c_s     (in)      Pointer to table speci-
  39.                                           fying  legal configura-
  40.                                           tion options  for  this
  41.                                           widget.
  42.  
  43.      int             _a_r_g_c       (in)      Number of arguments  in
  44.                                           _a_r_g_v.
  45.  
  46.      char            **_a_r_g_v     (in)      Command-line    options
  47.                                           for configuring widget.
  48.  
  49.      char            *_w_i_d_g_R_e_c   (in/out)  Points to widget record
  50.                                           structure.   Fields  in
  51.                                           this   structure    get
  52.                                           modified             by
  53.                                           Tk_ConfigureWidget   to
  54.                                           hold      configuration
  55.                                           information.
  56.  
  57.      int             _f_l_a_g_s      (in)      If  non-zero,  then  it
  58.                                           specifies an OR-ed com-
  59.                                           bination of flags  that
  60.  
  61.  
  62.  
  63. Tk                                                              1
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. Tk_ConfigureWidget(3) Tk Library Procedures                   3.3
  71.  
  72.  
  73.  
  74.                                           control  the processing
  75.                                           of configuration infor-
  76.                                           mation.
  77.                                           TK_CONFIG_ARGV_ONLY
  78.                                           causes the option data-
  79.                                           base and defaults to be
  80.                                           ignored,  and flag bits
  81.                                           TK_CONFIG_USER_BIT  and
  82.                                           higher   are   used  to
  83.                                           selectively     disable
  84.                                           entries in _s_p_e_c_s.
  85.  
  86.      type name       _t_y_p_e       (in)      The name of the type of
  87.                                           a widget record.
  88.  
  89.      field name      _f_i_e_l_d      (in)      The name of a field  in
  90.                                           records of type _t_y_p_e.
  91.  
  92.      char            *_a_r_g_v_N_a_m_e  (in)      The name  used  on  Tcl
  93.                                           command  lines to refer
  94.                                           to a particular  option
  95.                                           (e.g.  when  creating a
  96.                                           widget or invoking  the
  97.                                           configure  widget  com-
  98.                                           mand).   If   non-NULL,
  99.                                           then   information   is
  100.                                           returned only for  this
  101.                                           option.   If NULL, then
  102.                                           information is returned
  103.                                           for    all    available
  104.                                           options.
  105.  
  106.      Display         *_d_i_s_p_l_a_y   (in)      Display      containing
  107.                                           widget  whose record is
  108.                                           being freed;  needed in
  109.                                           order    to   free   up
  110.                                           resources.
  111. _________________________________________________________________
  112.  
  113. DESCRIPTION
  114.      Tk_ConfigureWidget is called to configure various aspects of
  115.      a  widget,  such as colors, fonts, border width, etc.  It is
  116.      intended as a convenience procedure to reduce the amount  of
  117.      code  that  must be written in individual widget managers to
  118.      handle configuration information.  It is  typically  invoked
  119.      when  widgets are created, and again when the configure com-
  120.      mand is invoked for a widget.  Although  intended  primarily
  121.      for  widgets, Tk_ConfigureWidget can be used in other situa-
  122.      tions where _a_r_g_c-_a_r_g_v information is to be used to fill in a
  123.      record structure, such as configuring graphical elements for
  124.      a canvas widget or entries of a menu.
  125.  
  126.  
  127.  
  128.  
  129. Tk                                                              2
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. Tk_ConfigureWidget(3) Tk Library Procedures                   3.3
  137.  
  138.  
  139.  
  140.      Tk_ConfigureWidget processes a table specifying  the  confi-
  141.      guration options that are supported (_s_p_e_c_s) and a collection
  142.      of command-line arguments (_a_r_g_c and _a_r_g_v) to fill in  fields
  143.      of  a  record  (_w_i_d_g_R_e_c).   It  uses the option database and
  144.      defaults specified in _s_p_e_c_s to fill  in  fields  of  _w_i_d_g_R_e_c
  145.      that are not specified in _a_r_g_v.  Tk_ConfigureWidget normally
  146.      returns the value TCL_OK; in this case it  does  not  modify
  147.      _i_n_t_e_r_p.   If  an error occurs then TCL_ERROR is returned and
  148.      Tk_ConfigureWidget will leave an error  message  in  _i_n_t_e_r_p-
  149.      >_r_e_s_u_l_t  in  the  standard  Tcl fashion.  In the event of an
  150.      error return, some of the fields of  _w_i_d_g_R_e_c  could  already
  151.      have  been  set,  if  configuration information for them was
  152.      successfully processed before the error occurred.  The other  |
  153.      fields  will  be  set  to  reasonable initial values so that  |
  154.      Tk_FreeOptions can be called for cleanup.
  155.  
  156.      The _s_p_e_c_s array specifies the kinds of configuration options
  157.      expected  by  the widget.  Each of its entries specifies one
  158.      configuration option and has the following structure:
  159.  
  160.           typedef struct {
  161.               int _t_y_p_e;
  162.               char *_a_r_g_v_N_a_m_e;
  163.               char *_d_b_N_a_m_e;
  164.               char *_d_b_C_l_a_s_s;
  165.               char *_d_e_f_V_a_l_u_e;
  166.               int _o_f_f_s_e_t;
  167.               int _s_p_e_c_F_l_a_g_s;
  168.               Tk_CustomOption *_c_u_s_t_o_m_P_t_r;                          |
  169.           } Tk_ConfigSpec;
  170.  
  171.  
  172.      The _t_y_p_e field indicates what type of  configuration  option
  173.      this   is  (e.g.  TK_CONFIG_COLOR  for  a  color  value,  or
  174.      TK_CONFIG_INT for an integer value).  The _t_y_p_e  field  indi-
  175.      cates  how  to  use  the  value  of the option (more on this
  176.      below).  The _a_r_g_v_N_a_m_e field is a string such as ``-font'' or
  177.      ``-bg'',  which  is  compared  with  the  values in _a_r_g_v (if
  178.      _a_r_g_v_N_a_m_e is NULL it means this  is  a  grouped  entry;   see
  179.      GROUPED  ENTRIES  below).  The _d_b_N_a_m_e and _d_b_C_l_a_s_s fields are
  180.      used to look up a value for this option in the option  data-
  181.      base.  The _d_e_f_V_a_l_u_e field specifies a default value for this
  182.      configuration option if no value is specified in either _a_r_g_v
  183.      or  the  option database.  _O_f_f_s_e_t indicates where in _w_i_d_g_R_e_c
  184.      to store information about this option, and  _s_p_e_c_F_l_a_g_s  con-
  185.      tains  additional  information  to control the processing of
  186.      this configuration  option  (see  FLAGS  below).   The  last
  187.      field,  _c_u_s_t_o_m_P_t_r, is only used if _t_y_p_e is TK_CONFIG_CUSTOM;
  188.      see CUSTOM OPTION TYPES below.
  189.  
  190.      Tk_ConfigureWidget first processes _a_r_g_v  to  see  which  (if
  191.      any)  configuration  options are specified there.  _A_r_g_v must
  192.      contain an even number of fields;  the first of each pair of
  193.  
  194.  
  195.  
  196. Tk                                                              3
  197.  
  198.  
  199.  
  200.  
  201.  
  202. Tk_ConfigureWidget(3) Tk Library Procedures                   3.3
  203.  
  204.  
  205.  
  206.      fields  must  match  the  _a_r_g_v_N_a_m_e  of  some  entry in _s_p_e_c_s
  207.      (unique abbreviations are acceptable), and the second  field
  208.      of  the  pair  contains  the  value  for  that configuration
  209.      option.  If there are entries in _s_p_e_c for which  there  were
  210.      no  matching  entries  in  _a_r_g_v, Tk_ConfigureWidget uses the
  211.      _d_b_N_a_m_e and _d_b_C_l_a_s_s fields of the _s_p_e_c_s entry  to  probe  the
  212.      option  database;   if  a value is found, then it is used as
  213.      the value for the option.  Finally, if no entry is found  in
  214.      the  option  database, the _d_e_f_V_a_l_u_e field of the _s_p_e_c_s entry
  215.      is used as the value for the configuration option.   If  the
  216.      _d_e_f_V_a_l_u_e  is  NULL, or if the TK_CONFIG_DONT_SET_DEFAULT bit
  217.      is set in _f_l_a_g_s, then there is no  default  value  and  this
  218.      _s_p_e_c_s entry will be ignored if no value is specified in _a_r_g_v
  219.      or the option database.
  220.  
  221.      Once a string value has been determined for a  configuration
  222.      option,  Tk_ConfigureWidget translates the string value into
  223.      a  more  useful  form,  such  as  a   color   if   _t_y_p_e   is
  224.      TK_CONFIG_COLOR  or  an  integer  if  _t_y_p_e is TK_CONFIG_INT.
  225.      This value is then  stored  in  the  record  pointed  to  by
  226.      _w_i_d_g_R_e_c.   This  record  is  assumed  to contain information
  227.      relevant to the manager of the widget;  its  exact  type  is
  228.      unknown  to  Tk_ConfigureWidget.   The  _o_f_f_s_e_t field of each
  229.      _s_p_e_c_s entry indicates where in _w_i_d_g_R_e_c to store the informa-
  230.      tion  about  this  configuration option.  You should use the
  231.      Tk_Offset macro to generate _o_f_f_s_e_t values (see below  for  a
  232.      description   of  Tk_Offset).   The  location  indicated  by
  233.      _w_i_d_g_R_e_c and _o_f_f_s_e_t will be referred to as the ``target''  in
  234.      the descriptions below.
  235.  
  236.      The _t_y_p_e field of each entry in _s_p_e_c_s determines what to  do
  237.      with  the  string  value  of that configuration option.  The
  238.      legal values for _t_y_p_e, and the corresponding actions, are:
  239.  
  240.      TK_CONFIG_ACTIVE_CURSOR
  241.           The value must be an ASCII string identifying a  cursor  |
  242.           in  a  form  suitable  for passing to Tk_GetCursor. The  |
  243.           value is converted to a Cursor by calling  Tk_GetCursor  |
  244.           and  the  result is stored in the target.  In addition,  |
  245.           the resulting cursor is  made  the  active  cursor  for  |
  246.           _t_k_w_i_n  by  calling XDefineCursor.  If TK_CONFIG_NULL_OK  |
  247.           is specified in _s_p_e_c_F_l_a_g_s then  the  value  may  be  an  |
  248.           empty  string,  in  which  case  the target and _t_k_w_i_n's  |
  249.           active cursor will be set to  None.   If  the  previous  |
  250.           value  of  the  target wasn't None, then it is freed by  |
  251.           passing it to Tk_FreeCursor.                             |
  252.  
  253.      TK_CONFIG_ANCHOR                                                   ||
  254.           The value must be an ASCII string identifying an anchor  |
  255.           point in one of the ways accepted by Tk_GetAnchor.  The  |
  256.           string   is   converted   to  a  Tk_Anchor  by  calling  |
  257.           Tk_GetAnchor and the result is stored in the target.
  258.  
  259.  
  260.  
  261. Tk                                                              4
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. Tk_ConfigureWidget(3) Tk Library Procedures                   3.3
  269.  
  270.  
  271.  
  272.      TK_CONFIG_BITMAP
  273.           The value must be an ASCII string identifying a  bitmap
  274.           in  a  form  suitable for passing to Tk_GetBitmap.  The
  275.           value is converted to a Pixmap by calling  Tk_GetBitmap
  276.           and   the   result   is   stored  in  the  target.   If  |
  277.           TK_CONFIG_NULL_OK is specified in  _s_p_e_c_F_l_a_g_s  then  the  |
  278.           value  may be an empty string, in which case the target  |
  279.           is set to None.  If the previous value  of  the  target
  280.           wasn't  None,  then  it  is  freed  by  passing  it  to
  281.           Tk_FreeBitmap.
  282.  
  283.      TK_CONFIG_BOOLEAN
  284.           The value must be an ASCII string specifying a  boolean
  285.           value.  Any of the values ``true'', ``yes'', ``on'', or
  286.           ``1'', or an abbreviation of one of these values, means
  287.           true;  any of the values ``false'', ``no'', ``off'', or
  288.           ``0'', or an abbreviation of one of these values, means
  289.           false.   The  target is expected to be an integer;  for
  290.           true values it will be set to 1 and for false values it
  291.           will be set to 0.
  292.  
  293.      TK_CONFIG_BORDER
  294.           The value must be an ASCII string identifying a  border
  295.           color in a form suitable for passing to Tk_Get3DBorder.
  296.           The value is converted to a (Tk_3DBorder *) by  calling
  297.           Tk_Get3DBorder  and the result is stored in the target.  |
  298.           If TK_CONFIG_NULL_OK is specified in _s_p_e_c_F_l_a_g_s then the  |
  299.           value  may be an empty string, in which case the target  |
  300.           will be set to NULL.  If the previous value of the tar-
  301.           get  wasn't  NULL,  then  it  is freed by passing it to
  302.           Tk_Free3DBorder.
  303.  
  304.      TK_CONFIG_CAP_STYLE
  305.           The value must be an ASCII  string  identifying  a  cap  |
  306.           style  in  one  of the ways accepted by Tk_GetCapStyle.  |
  307.           The string is converted to an integer value correspond-  |
  308.           ing  to the cap style by calling Tk_GetCapStyle and the  |
  309.           result is stored in the target.
  310.  
  311.      TK_CONFIG_COLOR
  312.           The value must be an ASCII string identifying  a  color
  313.           in  a  form  suitable  for passing to Tk_GetColor.  The
  314.           value  is  converted  to  an  (XColor  *)  by   calling
  315.           Tk_GetColor and the result is stored in the target.  If  |
  316.           TK_CONFIG_NULL_OK is specified in  _s_p_e_c_F_l_a_g_s  then  the  |
  317.           value  may be an empty string, in which case the target  |
  318.           will be set to None.  If the previous value of the tar-
  319.           get  wasn't  NULL,  then  it  is freed by passing it to
  320.           Tk_FreeColor.
  321.  
  322.      TK_CONFIG_CURSOR
  323.           This option  is  identical  to  TK_CONFIG_ACTIVE_CURSOR
  324.  
  325.  
  326.  
  327. Tk                                                              5
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334. Tk_ConfigureWidget(3) Tk Library Procedures                   3.3
  335.  
  336.  
  337.  
  338.           except  that  the new cursor is not made the active one
  339.           for _t_k_w_i_n.
  340.  
  341.      TK_CONFIG_CUSTOM
  342.           This option allows applications to  define  new  option  |
  343.           types.   The  _c_u_s_t_o_m_P_t_r  field of the entry points to a  |
  344.           structure defining the new option type.  See  the  sec-  |
  345.           tion CUSTOM OPTION TYPES below for details.
  346.  
  347.      TK_CONFIG_DOUBLE
  348.           The value must be an ASCII floating-point number in the
  349.           format  accepted by strtol.  The string is converted to
  350.           a double value, and the value is stored in the target.
  351.  
  352.      TK_CONFIG_END
  353.           Marks the end of the table.  The last  entry  in  _s_p_e_c_s
  354.           must  have  this  type;   all  of  its other fields are
  355.           ignored and it will never match any arguments.
  356.  
  357.      TK_CONFIG_FONT
  358.           The value must be an ASCII string identifying a font in
  359.           a  form  suitable for passing to Tk_GetFontStruct.  The
  360.           value is converted to an  (XFontStruct  *)  by  calling
  361.           Tk_GetFontStruct  and  the result is stored in the tar-
  362.           get.  If TK_CONFIG_NULL_OK is  specified  in  _s_p_e_c_F_l_a_g_s  |
  363.           then  the  value  may be an empty string, in which case  |
  364.           the target will be set to NULL.  If the previous  value
  365.           of  the target wasn't NULL, then it is freed by passing
  366.           it to Tk_FreeFontStruct.
  367.  
  368.      TK_CONFIG_INT
  369.           The value must be an ASCII integer string in the format
  370.           accepted  by strtol (e.g. ``0'' and ``0x'' prefixes may
  371.           be  used  to  specify  octal  or  hexadecimal  numbers,
  372.           respectively).   The  string is converted to an integer
  373.           value and the integer is stored in the target.
  374.  
  375.      TK_CONFIG_JOIN_STYLE
  376.           The value must be an ASCII string  identifying  a  join  |
  377.           style  in  one of the ways accepted by Tk_GetJoinStyle.  |
  378.           The string is converted to an integer value correspond-  |
  379.           ing  to  the  join style by calling Tk_GetJoinStyle and  |
  380.           the result is stored in the target.                      |
  381.  
  382.      TK_CONFIG_JUSTIFY                                                  ||
  383.           The value must be an ASCII string identifying a justif-  |
  384.           ication  method  in  one  of  the  ways   accepted   by  |
  385.           Tk_GetJustify.  The string is converted to a Tk_Justify  |
  386.           by calling Tk_GetJustify and the result  is  stored  in  |
  387.           the target.                                              |
  388.  
  389.      TK_CONFIG_MM                                                       ||
  390.  
  391.  
  392.  
  393. Tk                                                              6
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400. Tk_ConfigureWidget(3) Tk Library Procedures                   3.3
  401.  
  402.  
  403.  
  404.           The  value must specify a screen distance in one of the  |
  405.           forms acceptable to Tk_GetScreenMM.  The string is con-  |
  406.           verted  to  double-precision floating-point distance in  |
  407.           millimeters and the value is stored in the target.       |
  408.  
  409.      TK_CONFIG_PIXELS                                                   ||
  410.           The value must specify screen units in one of the forms  |
  411.           acceptable to Tk_GetPixels.  The string is converted to  |
  412.           an  integer  distance in pixels and the value is stored  |
  413.           in the target.
  414.  
  415.      TK_CONFIG_RELIEF
  416.           The value must be an ASCII string identifying a  relief
  417.           in  a  form  suitable for passing to Tk_GetRelief.  The
  418.           value is converted to an integer relief value  by  cal-
  419.           ling  Tk_GetRelief and the result is stored in the tar-
  420.           get.
  421.  
  422.      TK_CONFIG_STRING
  423.           A copy of the value is made by allocating memory  space  |
  424.           with   malloc   and   copying   the   value   into  the  |
  425.           dynamically-allocated space.   A  pointer  to  the  new  |
  426.           string  is  stored in the target.  If TK_CONFIG_NULL_OK  |
  427.           is specified in _s_p_e_c_F_l_a_g_s then  the  value  may  be  an  |
  428.           empty  string,  in which case the target will be set to  |
  429.           NULL.  If the previous value of the target wasn't NULL,  |
  430.           then it is freed by passing it to free.
  431.  
  432.      TK_CONFIG_SYNONYM
  433.           This _t_y_p_e value identifies  special  entries  in  _s_p_e_c_s
  434.           that  are synonyms for other entries.  If an _a_r_g_v value
  435.           matches the _a_r_g_v_N_a_m_e of a TK_CONFIG_SYNONYM entry,  the
  436.           entry  isn't used directly. Instead, Tk_ConfigureWidget
  437.           searches _s_p_e_c_s for another entry whose _a_r_g_v_N_a_m_e is  the
  438.           same  as  the  _d_b_N_a_m_e  field  in  the TK_CONFIG_SYNONYM
  439.           entry;  this new entry is used just as if its  _a_r_g_v_N_a_m_e
  440.           had  matched  the  _a_r_g_v  value.   The synonym mechanism
  441.           allows multiple _a_r_g_v values to be  used  for  a  single
  442.           configuration   option,  such  as  ``-background''  and
  443.           ``-bg''.
  444.  
  445.      TK_CONFIG_UID
  446.           The value is translated to a Tk_Uid (by passing  it  to
  447.           Tk_GetUid).   The resulting value is stored in the tar-
  448.           get.  If TK_CONFIG_NULL_OK is  specified  in  _s_p_e_c_F_l_a_g_s  |
  449.           and  the  value is an empty string then the target will  |
  450.           be set to NULL.                                          |
  451.  
  452.      TK_CONFIG_WINDOW                                                   ||
  453.           The value must be a window path name.  It is translated  |
  454.           to a Tk_Window token and the token  is  stored  in  the  |
  455.           target.
  456.  
  457.  
  458.  
  459. Tk                                                              7
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466. Tk_ConfigureWidget(3) Tk Library Procedures                   3.3
  467.  
  468.  
  469.  
  470. GROUPED ENTRIES
  471.      In some cases it is useful to  generate  multiple  resources
  472.      from  a  single  configuration  value.  For example, a color
  473.      name might be used both to generate the background color for
  474.      a  widget  (using  TK_CONFIG_COLOR)  and  to  generate a 3-D
  475.      border to draw around the widget  (using  TK_CONFIG_BORDER).
  476.      In  cases  like  this it is possible to specify that several
  477.      consecutive entries in _s_p_e_c_s are to be treated as  a  group.
  478.      The  first  entry  is  used  to determine a value (using its
  479.      _a_r_g_v_N_a_m_e, _d_b_N_a_m_e, _d_b_C_l_a_s_s, and _d_e_f_V_a_l_u_e fields).  The  value
  480.      will  be  processed several times (one for each entry in the
  481.      group), generating multiple different resources and  modify-
  482.      ing  multiple  targets  within _w_i_d_g_R_e_c.  Each of the entries
  483.      after the first must have  a  NULL  value  in  its  _a_r_g_v_N_a_m_e
  484.      field;   this indicates that the entry is to be grouped with
  485.      the entry that precedes it.  Only the _t_y_p_e and _o_f_f_s_e_t fields
  486.      are used from these follow-on entries.
  487.  
  488.  
  489. FLAGS
  490.      The _f_l_a_g_s argument passed to Tk_ConfigureWidget is  used  in
  491.      conjunction  with  the  _s_p_e_c_F_l_a_g_s  fields  in the entries of
  492.      _s_p_e_c_s to provide additional control over the  processing  of
  493.      configuration  options.  These values are used in three dif-
  494.      ferent ways as described below.
  495.  
  496.      First, if the _f_l_a_g_s argument to Tk_ConfigureWidget  has  the
  497.      TK_CONFIG_ARGV_ONLY     bit     set     (i.e.,    _f_l_a_g_s    |
  498.      TK_CONFIG_ARGV_ONLY != 0),  then  the  option  database  and
  499.      _d_e_f_V_a_l_u_e  fields are not used.  In this case, if an entry in
  500.      _s_p_e_c_s doesn't match a field in _a_r_g_v  then  nothing  happens:
  501.      the  corresponding  target  isn't modified.  This feature is
  502.      useful when the goal  is  to  modify  certain  configuration
  503.      options while leaving others in their current state, such as
  504.      when a configure widget command is being processed.
  505.  
  506.      Second, the _s_p_e_c_F_l_a_g_s field of an entry in _s_p_e_c_s may be used  |
  507.      to  control  the  processing  of that entry.  Each _s_p_e_c_F_l_a_g_s  |
  508.      field may consists of an OR-ed combination of the  following  |
  509.      values:                                                       |
  510.  
  511.      TK_CONFIG_COLOR_ONLY                                               ||
  512.           If  this  bit  is  set then the entry will only be con-  |
  513.           sidered if the display for _t_k_w_i_n has more than one  bit  |
  514.           plane.  If the display is monochromatic then this _s_p_e_c_s  |
  515.           entry will be ignored.                                   |
  516.  
  517.      TK_CONFIG_MONO_ONLY                                                ||
  518.           If  this  bit  is  set then the entry will only be con-  |
  519.           sidered if the display for _t_k_w_i_n has  exactly  one  bit  |
  520.           plane.   If  the display is not monochromatic then this  |
  521.           _s_p_e_c_s entry will be ignored.                             |
  522.  
  523.  
  524.  
  525. Tk                                                              8
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532. Tk_ConfigureWidget(3) Tk Library Procedures                   3.3
  533.  
  534.  
  535.  
  536.      TK_CONFIG_NULL_OK                                                  ||
  537.           This  bit  is  only  relevant for some types of entries  |
  538.           (see  the  descriptions  of  the  various  entry  types  |
  539.           above).  If this bit is set, it indicates that an empty  |
  540.           string value for the field  is  acceptable  and  if  it  |
  541.           occurs  then  the target should be set to NULL or None,  |
  542.           depending on the type of the target.  This flag is typ-  |
  543.           ically  used  to  allow  a  feature  to  be  turned off  |
  544.           entirely, e.g. set a cursor value to  None  so  that  a  |
  545.           window  simply  inherits  its parent's cursor.  If this  |
  546.           bit isn't set  then  empty  strings  are  processed  as  |
  547.           strings, which generally results in an error.            |
  548.  
  549.      TK_CONFIG_DONT_SET_DEFAULT                                         ||
  550.           If this bit is one, it means that the _d_e_f_V_a_l_u_e field of  |
  551.           the entry should only be used for returning the default  |
  552.           value     in    Tk_ConfigureInfo.     In    calls    to  |
  553.           Tk_ConfigureWidget no  default  will  be  supplied  for  |
  554.           entries  with  this  flag  set;  it is assumed that the  |
  555.           caller has already supplied a default value in the tar-  |
  556.           get location.  This flag provides a performance optimi-  |
  557.           zation where it is expensive  to  process  the  default  |
  558.           string:   the client can compute the default once, save  |
  559.           the   value,   and   provide    it    before    calling  |
  560.           Tk_ConfigureWidget.                                      |
  561.  
  562.      TK_CONFIG_OPTION_SPECIFIED                                         ||
  563.           This  bit  is  set  and  cleared by Tk_ConfigureWidget.  |
  564.           Whenever Tk_ConfigureWidget returns, this bit  will  be  |
  565.           set  in  all the entries where a value was specified in  |
  566.           _a_r_g_v.  It will be zero in all other entries.  This  bit  |
  567.           provides  a  way  for clients to determine which values  |
  568.           actually changed in a call to Tk_ConfigureWidget.
  569.  
  570.      The TK_CONFIG_MONO_ONLY and TK_CONFIG_COLOR_ONLY  flags  are
  571.      typically used to specify different default values for mono-
  572.      chrome and color displays.  This is  done  by  creating  two
  573.      entries  in  _s_p_e_c_s  that  are  identical  except  for  their
  574.      _d_e_f_V_a_l_u_e and _s_p_e_c_F_l_a_g_s fields.  One entry  should  have  the
  575.      value  TK_CONFIG_MONO_ONLY  in its _s_p_e_c_F_l_a_g_s and the default
  576.      value for monochrome displays in its  _d_e_f_V_a_l_u_e;   the  other
  577.      entry  entry  should  have the value TK_CONFIG_COLOR_ONLY in
  578.      its  _s_p_e_c_F_l_a_g_s  and  the  appropriate  _d_e_f_V_a_l_u_e  for   color
  579.      displays.
  580.  
  581.      Third, it is possible to use _f_l_a_g_s and _s_p_e_c_F_l_a_g_s together to
  582.      selectively  disable  some  entries.   This  feature  is not
  583.      needed very often.  It is  useful  in  cases  where  several
  584.      similar  kinds  of widgets are implemented in one place.  It
  585.      allows a single _s_p_e_c_s table to be created with all the  con-
  586.      figuration  options for all the widget types.  When process-
  587.      ing a particular widget type, only entries relevant to  that
  588.  
  589.  
  590.  
  591. Tk                                                              9
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598. Tk_ConfigureWidget(3) Tk Library Procedures                   3.3
  599.  
  600.  
  601.  
  602.      type  will  be used.  This effect is achieved by setting the
  603.      high-order bits (those in positions equal to or greater than
  604.      TK_CONFIG_USER_BIT)  in  _s_p_e_c_F_l_a_g_s  values  or in _f_l_a_g_s.  In
  605.      order for a particular entry in _s_p_e_c_s to be used, its  high-
  606.      order  bits  must  match  exactly the high-order bits of the
  607.      _f_l_a_g_s value passed to Tk_ConfigureWidget.  If a _s_p_e_c_s  table
  608.      is  being  used  for N different widget types, then N of the
  609.      high-order bits will be used.  Each _s_p_e_c_s  entry  will  have
  610.      one  of  more  of  those  bits set in its _s_p_e_c_F_l_a_g_s field to
  611.      indicate the widget types for which  this  entry  is  valid.
  612.      When  calling  Tk_ConfigureWidget,  _f_l_a_g_s will have a single
  613.      one of these bits set to select the entries for the  desired
  614.      widget type.  For a working example of this feature, see the
  615.      code in tkButton.c.
  616.  
  617.  
  618. TK_OFFSET
  619.      The Tk_Offset macro is provided as a safe way of  generating
  620.      the  _o_f_f_s_e_t  values for entries in Tk_ConfigSpec structures.
  621.      It takes two arguments:  the name of a type of  record,  and
  622.      the  name  of  a  field in that record.  It returns the byte
  623.      offset of the named field in records of the given type.
  624.  
  625.  
  626. TK_CONFIGUREINFO
  627.      The Tk_ConfigureInfo procedure may be used to obtain  infor-
  628.      mation  about  one or all of the options for a given widget.
  629.      Given a token for a window (_t_k_w_i_n), a table  describing  the
  630.      configuration  options  for  a  class  of widgets (_s_p_e_c_s), a
  631.      pointer to a widget record containing the  current  informa-
  632.      tion  for  a widget (_w_i_d_g_R_e_c), and a NULL _a_r_g_v_N_a_m_e argument,
  633.      Tk_ConfigureInfo generates a string describing  all  of  the
  634.      configuration  options for the window.  The string is placed
  635.      in _i_n_t_e_r_p->_r_e_s_u_l_t.  Under normal  circumstances  it  returns
  636.      TCL_OK;   if  an  error occurs then it returns TCL_ERROR and
  637.      _i_n_t_e_r_p->_r_e_s_u_l_t contains an error message.
  638.  
  639.      If _a_r_g_v_N_a_m_e is NULL, then the value left  in  _i_n_t_e_r_p->_r_e_s_u_l_t
  640.      by  Tk_ConfigureInfo  consists  of  a  list  of  one or more
  641.      entries, each of which describes  one  configuration  option
  642.      (i.e. one entry in _s_p_e_c_s).  Each entry in the list will con-
  643.      tain either two or five values.  If the corresponding  entry
  644.      in _s_p_e_c_s has type TK_CONFIG_SYNONYM, then the list will con-
  645.      tain two values:  the _a_r_g_v_N_a_m_e for the entry and the  _d_b_N_a_m_e
  646.      (synonym  name).   Otherwise  the  list  will  contain  five
  647.      values:  _a_r_g_v_N_a_m_e, _d_b_N_a_m_e, _d_b_C_l_a_s_s,  _d_e_f_V_a_l_u_e,  and  current
  648.      value.   The  current value is computed from the appropriate
  649.      field of _w_i_d_g_R_e_c by calling procedures like Tk_NameOfColor.
  650.  
  651.      If the _a_r_g_v_N_a_m_e argument to  Tk_ConfigureInfo  is  non-NULL,
  652.      then  it  indicates  a  single  option,  and  information is
  653.      returned  only  for  that  option.   The  string  placed  in
  654.  
  655.  
  656.  
  657. Tk                                                             10
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664. Tk_ConfigureWidget(3) Tk Library Procedures                   3.3
  665.  
  666.  
  667.  
  668.      _i_n_t_e_r_p->_r_e_s_u_l_t  will be a list containing two or five values
  669.      as  described  above;   this  will  be  identical   to   the
  670.      corresponding  sublist  that  would  have  been  returned if
  671.      _a_r_g_v_N_a_m_e had been NULL.
  672.  
  673.      The _f_l_a_g_s argument to Tk_ConfigureInfo is used  to  restrict
  674.      the    _s_p_e_c_s    entries    to    consider,   just   as   for
  675.      Tk_ConfigureWidget.
  676.  
  677.  
  678. TK_FREEOPTIONS
  679.      The Tk_FreeOptions procedure may be  invoked  during  widget  |
  680.      cleanup to release all of the resources associated with con-  |
  681.      figuration options.  It scans through  _s_p_e_c_s  and  for  each  |
  682.      entry  corresponding  to  a resource that must be explicitly  |
  683.      freed (e.g. those with type TK_CONFIG_COLOR), it  frees  the  |
  684.      resource  in  the widget record.  If the field in the widget  |
  685.      record doesn't refer to a resource (e.g.  it contains a null  |
  686.      pointer)  then  no  resource is freed for that entry.  After  |
  687.      freeing a resource, Tk_FreeOptions  sets  the  corresponding  |
  688.      field of the widget record to null.
  689.  
  690.  
  691. CUSTOM OPTION TYPES
  692.      Applications can extend  the  built-in  configuration  types  |
  693.      with additional configuration types by writing procedures to  |
  694.      parse and print options of the a type and creating a  struc-  |
  695.      ture pointing to those procedures:                            |
  696.  
  697.           typedef struct Tk_CustomOption {                         |
  698.               Tk_OptionParseProc *_p_a_r_s_e_P_r_o_c;                       |
  699.               Tk_OptionPrintProc *_p_r_i_n_t_P_r_o_c;                       |
  700.               ClientData _c_l_i_e_n_t_D_a_t_a;                               |
  701.           } Tk_CustomOption;                                       |
  702.  
  703.           typedef int Tk_OptionParseProc(                          |
  704.               ClientData _c_l_i_e_n_t_D_a_t_a,                               |
  705.               Tcl_Interp *_i_n_t_e_r_p,                                  |
  706.               Tk_Window _t_k_w_i_n,                                     |
  707.               char *_v_a_l_u_e,                                         |
  708.               char *_w_i_d_g_R_e_c,                                       |
  709.               int _o_f_f_s_e_t);                                         |
  710.  
  711.           typedef char *Tk_OptionPrintProc(                        |
  712.               ClientData _c_l_i_e_n_t_D_a_t_a,                               |
  713.               Tk_Window _t_k_w_i_n,                                     |
  714.               char *_w_i_d_g_R_e_c,                                       |
  715.               int _o_f_f_s_e_t,                                          |
  716.               Tcl_FreeProc **_f_r_e_e_P_r_o_c_P_t_r);                         |
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723. Tk                                                             11
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730. Tk_ConfigureWidget(3) Tk Library Procedures                   3.3
  731.  
  732.  
  733.  
  734.      The Tk_CustomOption structure contains three  fields,  which  |
  735.      are pointers to the two procedures and a _c_l_i_e_n_t_D_a_t_a value to  |
  736.      be passed to those procedures when they  are  invoked.   The  |
  737.      _c_l_i_e_n_t_D_a_t_a  value typically points to a structure containing  |
  738.      information that is needed by the procedures when  they  are  |
  739.      parsing and printing options.                                 |
  740.  
  741.      The _p_a_r_s_e_P_r_o_c procedure is invoked by Tk_ConfigureWidget  to  |
  742.      parse  a  string and store the resulting value in the widget  |
  743.      record.  The _c_l_i_e_n_t_D_a_t_a argument is a copy of the _c_l_i_e_n_t_D_a_t_a  |
  744.      field in the Tk_CustomOption structure.  The _i_n_t_e_r_p argument  |
  745.      points to a Tcl interpreter used for error reporting.  _T_k_w_i_n  |
  746.      is  a copy of the _t_k_w_i_n argument to Tk_ConfigureWidget.  The  |
  747.      _v_a_l_u_e argument is a string  describing  the  value  for  the  |
  748.      option;  it could have been specified explicitly in the call  |
  749.      to Tk_ConfigureWidget or it could come from the option data-  |
  750.      base  or  a default.  _V_a_l_u_e will never be a null pointer but  |
  751.      it may point to an empty string.  _R_e_c_o_r_d_P_t_r is the  same  as  |
  752.      the  _w_i_d_g_R_e_c  argument  to Tk_ConfigureWidget;  it points to  |
  753.      the start of the widget record to modify.   The  last  argu-  |
  754.      ment,  _o_f_f_s_e_t,  gives  the offset in bytes from the start of  |
  755.      the widget record to the location where the option value  is  |
  756.      to  be placed.  The procedure should translate the string to  |
  757.      whatever form is appropriate for the option  and  store  the  |
  758.      value  in  the  widget  record.   It  should normally return  |
  759.      TCL_OK, but if an error occurs in translating the string  to  |
  760.      a  value  then it should return TCL_ERROR and store an error  |
  761.      message in _i_n_t_e_r_p->_r_e_s_u_l_t.                                    |
  762.  
  763.      The _p_r_i_n_t_P_r_o_c procedure is  called  by  Tk_ConfigureInfo  to  |
  764.      produce  a  string value describing an existing option.  Its  |
  765.      _c_l_i_e_n_t_D_a_t_a, _t_k_w_i_n, _w_i_d_g_R_e_c, and _o_f_f_s_e_t  arguments  all  have  |
  766.      the  same meaning as for Tk_OptionParseProc procedures.  The  |
  767.      _p_r_i_n_t_P_r_o_c procedure should examine the option whose value is  |
  768.      stored  at  _o_f_f_s_e_t  in  _w_i_d_g_R_e_c, produce a string describing  |
  769.      that option, and return a pointer to  the  string.   If  the  |
  770.      string  is  stored in dynamically-allocated memory, then the  |
  771.      procedure must set *_f_r_e_e_P_r_o_c_P_t_r to the  address  of  a  pro-  |
  772.      cedure    to    call    to   free   the   string's   memory;  |
  773.      Tk_ConfigureInfo will call this procedure when  it  is  fin-  |
  774.      ished  with  the  string.  If the result string is stored in  |
  775.      static memory then _p_r_i_n_t_P_r_o_c need not do anything  with  the  |
  776.      _f_r_e_e_P_r_o_c_P_t_r argument.                                         |
  777.  
  778.      Once  _p_a_r_s_e_P_r_o_c  and  _p_r_i_n_t_P_r_o_c  have  been  defined  and  a  |
  779.      Tk_CustomOption structure has been created for them, options  |
  780.      of this new  type  may  be  manipulated  with  Tk_ConfigSpec  |
  781.      entries  whose  _t_y_p_e  fields  are TK_CONFIG_CUSTOM and whose  |
  782.      _c_u_s_t_o_m_P_t_r fields point to the Tk_CustomOption structure.
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789. Tk                                                             12
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796. Tk_ConfigureWidget(3) Tk Library Procedures                   3.3
  797.  
  798.  
  799.  
  800. EXAMPLES
  801.      Although the explanation  of  Tk_ConfigureWidget  is  fairly
  802.      complicated,  its actual use is pretty straightforward.  The
  803.      easiest way to get started is  to  copy  the  code  from  an
  804.      existing  widget.   The  library  implementation  of  frames
  805.      (tkFrame.c)  has  a  simple  configuration  table,  and  the
  806.      library  implementation  of  buttons (tkButton.c) has a much
  807.      more complex table that uses many  of  the  fancy  _s_p_e_c_F_l_a_g_s
  808.      mechanisms.
  809.  
  810.  
  811. KEYWORDS
  812.      anchor, bitmap, boolean, border, cap  style,  color,  confi-
  813.      guration  options,  cursor,  custom,  double, font, integer,
  814.      join style, justify, millimeters, pixels,  relief,  synonym,
  815.      uid
  816.  
  817.  
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824.  
  825.  
  826.  
  827.  
  828.  
  829.  
  830.  
  831.  
  832.  
  833.  
  834.  
  835.  
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855. Tk                                                             13
  856.  
  857.  
  858.  
  859.